package com.hpf.community.generator;


import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.OracleTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang.time.DateFormatUtils;

import java.util.*;

/**
 * @author 黄朋飞
 * @version 创建时间：2018年8月19日---下午8:09:35
 * @description
 */
public class MpGeneratorOracle {

    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir("D://mybatis-plus//");
        gc.setFileOverride(true);
        gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(false);// XML columList
        gc.setAuthor("huangpengfei");

        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setTypeConvert(new OracleTypeConvert() {
            // 自定义数据库表字段类型转换【可选】
            @Override
            public DbColumnType processTypeConvert(String fieldType) {
                // 注意！！processTypeConvert 存在默认类型转换，如果不是你要的效果请自定义返回、非如下直接返回。
                return super.processTypeConvert(fieldType);
            }
        });
        dataSourceConfig.setDriverName("oracle.jdbc.driver.OracleDriver");
        dataSourceConfig.setUsername("scott");
        dataSourceConfig.setPassword("tiger");
        dataSourceConfig.setUrl("jdbc:oracle:thin:@127.0.0.1:1521/ORCL");
        mpg.setDataSource(dataSourceConfig);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setEntityColumnConstant(true); // 生成常量字段
//         strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        String[] tablePrefix = new String[]{"C_"};
        if (tablePrefix != null && tablePrefix.length > 0) {
            strategy.setTablePrefix(tablePrefix);
        }
        String[] tableName = new String[]{"F_SYS"};
//        String[] tableNames = ConfigurationUtils.getStringArray("tableName");
//        System.out.println("tableNames------------>"+tableNames);
//        if (!StringUtils.isAllBlank(tableNames)) {
            strategy.setInclude(tableName); // 需要生成的表
//        }

        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent(null);
        packageConfig.setEntity("com.hpf.community.pojo");
        packageConfig.setMapper("com.hpf.community.mapper");
        packageConfig.setController("com.hpf.community.controller");
        packageConfig.setService("com.hpf.community.service");
        packageConfig.setServiceImpl("com.hpf.community.service.impl");
        packageConfig.setXml("mapper.oracle");
        mpg.setPackageInfo(packageConfig);

        // 注入自定义配置，可以在 VM 中使用 cfg.abc 【可无】
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>(16);
                map.put("time", DateFormatUtils.format(new Date(), "yyyy年MM月dd日---HH:mm:ss"));
//                map.put("constantsClass", "com.hpf.community.constants");
                map.put("entityModelPackage", "com.hpf.community.model");
                map.put("entityPackage", "com.hpf.community.pojo");
                this.setMap(map);
            }
        };

        List<FileOutConfig> focList = new ArrayList<>();

        //添加Entity扩展对象
        focList.add(new FileOutConfig("templates/entityModel.java.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                StringBuilder sb = new StringBuilder("D://mybatis-plus//");
                sb.append("/com/hpf/community/model");
                sb.append("/" + tableInfo.getEntityName() + "Model.java");
                return sb.toString();
            }
        });

        //这块是set到上面自定义配置中
        cfg.setFileOutConfigList(focList);
        //set进去代码生成器对象中
        mpg.setCfg(cfg);
        // 执行生成
        mpg.execute();
    }

}